/*
 * @Author jiangzhiwei
 * @Date 2023-07-18 18:22:57
 * @LastEditors jiangzhiwei
 * @LastEditTime 2023-07-19 11:39:16
 * @FilePath \test-v3\src\components\yc-cron\utils\attrutil.js
 * @Description 属性工具类
 */
import { isVue2 } from 'vue-demi'

// const ATTRS = 'attrs'
// const switchAttrMap = {
//   id: ATTRS,
//   value: ATTRS
// }
const specialAttrs = ['attrs', 'props', 'domProps']
const specialEvents = ['on', 'nativeOn']
/**
 * @Author jiangzhiwei
 * @Date 2023-07-19 09:43:25
 * @Description 根据是vue2还是vue3生成对应的属性对象
 * @param {object} options
 * @return {object}
 */
export function generateAttr (options) {
  if (isVue2) {
    return options
  } else {
    return getHandleV3(options)
  }
}

// function getHandleV2 (options) {
//   return Object.keys(options).reduce((opt, key) => {
//     const value = options[key]
//     const parent = switchAttrMap[key]
//     if (parent) { // 如果找到
//       if (!opt[parent]) {
//         opt[parent] = {}
//       }
//       opt[parent][key] = value
//     } else if (key.startsWith('on')) {
//       if (!opt.on) {
//         opt.on = {}
//       }
//       const e = key.charAt(2).toLowerCase() + key.substring(3)
//       opt.on[e] = value
//     } else { // 不变
//       opt[key] = value
//     }
//     return opt
//   }, {})
// }

function getHandleV3 (options) {
  return Object.keys(options).reduce((opt, key) => {
    const value = options[key]
    if (specialAttrs.includes(key)) { // 如果是特定属性
      if (typeof value === 'object') {
        // 遍历加入对象中的所有属性
        Object.keys(value).forEach(k => {
          opt[k] = value[k]
        })
      }
    } else if (specialEvents.includes(key)) { // 如果是特定事件
      if (typeof value === 'object') {
        // 遍历加入对象中的所有属性
        Object.keys(value).forEach(k => {
          const ek = `on${k.charAt(0).toUpperCase()}${k.substring(1)}`
          opt[ek] = value[k]
        })
      }
    } else { // vue2与vue3相同
      opt[key] = value
    }
    return opt
  }, {})
}